grammar Calc ;

prog : stat+
     ;

stat : expr                     # printExpr
     | ID '=' expr              # assign
     ;

expr : expr op=(MUL|DIV) expr   # mulDiv
     | expr op=(ADD|SUB) expr   # addSub
     | INT                      # int
     | ID                       # id
     | '(' expr ')'             # parens
     ;

MUL : '*' ;
DIV : '/' ;
ADD : '+' ;
SUB : '-' ;

INT : [0-9]+ ;

ID : [a-zA-Z]+ ;

WS : [ \t\r\u000C\n]+ -> skip ;